package main

import (
	"fmt"
	"sync"
	"time"
)

var wg sync.WaitGroup

func test() {
	// 推荐方式：使用 defer 确保 wg.Done() 被调用
	defer wg.Done()

	for i := 0; i < 10; i++ {
		fmt.Println("goroutine, 你好goLang-", i)
		time.Sleep(time.Millisecond * 100)
	}
}

// 素数
func test2() {
	start := time.Now().Unix()
	for i := 2; i < 12000; i++ {
		flag := true
		for j := 2; j < i; j++ {
			if i%j == 0 {
				flag = false
				break
			}
		}
		if flag {
			fmt.Println("素数: ", i)
		}
	}
	end := time.Now().Unix()
	fmt.Println("耗时：", end-start)
}

func test3(num int, part int) {
	for i := (num-1)*part + 1; i < num*part; i++ {
		if i == 1 {
			continue
		}

		flag := true
		for j := 2; j < i; j++ {
			if i%j == 0 {
				flag = false
				break
			}
		}
		if flag {
			fmt.Println("素数: ", i)
		}
	}

	defer wg.Done()
}

func main() {
	//// 协程计数器+1
	//wg.Add(1)
	//
	////XXX 表示开启一个协程
	//go test()
	//
	//for i := 0; i < 10; i++ {
	//	fmt.Println("主线程, 你好goLang-", i)
	//	time.Sleep(time.Millisecond * 50)
	//}
	//
	//// 等待协程执行完毕
	//wg.Wait()
	//
	//// 获取当前计算机上面的cpu个数
	//fmt.Println("cpu个数：", runtime.NumCPU())
	//// 可以自己设置使用cpu个数
	//runtime.GOMAXPROCS(runtime.NumCPU())

	//test2()
	start := time.Now().Unix()
	for i := 1; i <= 5; i++ {
		wg.Add(1)
		go test3(i, 30000)
	}
	wg.Wait()
	end := time.Now().Unix()
	fmt.Println("耗时：", end-start)
}
